package com.cskayan.javase.object._7wrapper;

/**
 * 包装类的特点:
 *      1.包装类的"自动拆装箱",最重要,最显著的特点.
 *          a.在Java当中，把基本数据类型变量，
 *              转换为其对应包装类的引用数据类型变量，称之为"装箱"
 *          b.在Java当中，把包装类的引用数据类型类型变量，
 *              转换为其对应基本数据类型变量，称之为"拆箱"
 *         Java当中的装箱和拆箱都是自动完成的
 *         这意味着:
 *              在绝大多数情况下,基本数据类型和它的包装类型都可以直接混用.
 *
 *      2.包装类型对象还有一个非常重要的特点,它们都是不可变对象.
 *      3.包装类型当中的整数类型,包括Byte,Short,Character,Integer,Long
 *          它们之间比较数值大小,不要用"=="
 *          而是用equals
 *
 *          这是因为包装类型整型中,如果它们的取值范围在一个byte类型[-128,127]中
 *          会直接去使用缓冲中的整型对象
 *          而不会创建新的对象
 *
 *          反之,如果不在一个byte范围内
 *          就不去共享缓冲中的对象了
 *          而是直接创建一个新的对象
 *
 *          每当JVM启动的时候,这些缓冲中的整型对象,都已经在堆上创建了
 *          等待被共享使用
 *
 * @since 15:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        // 以下是自动装箱
        Integer i = 123;

        // 以下是自动拆箱
        int num = i;

        /*
            自动装箱和拆箱其实都是依赖于自动调用方法实现的
            装箱依赖于:
                包装类型类名.valueOf(对应基本数据类型变量)
            拆箱依赖于:
                包装类型对象名.基本数据类型名字Value();
         */
        // Byte aByte = Byte.valueOf(100);
        // Unnecessary boxing 'Integer.valueOf(123 )'
        Integer a = Integer.valueOf(123);
        // Unnecessary unboxing 'a.intValue()'
        int b = a.intValue();

        int i1 = Integer.parseInt("123");
        double v = Double.parseDouble("0.1");
    }
}
